输入在第一行给出两个正整数 N 和 M(均不超过10 000),分别为敌方城市个数(于是默认城市从 1 到 N 编号)和连接两城市的通路条数。随后 M 行,每行给出一条通路所连接的两个城市的编号,其间以一个空格分隔。在城市信息之后给出参谋部的系列方案,即一个正整数 K (≤ 100)和随后的 K 行方案,每行按以下格式给出:
int vis[10001]; int N, M; structCity { vector<int> adj; int degree; } city[10001]; intmain() { cin >> N >> M; while (M--) { int a, b; cin >> a >> b; city[a].adj.push_back(b); city[a].degree++; city[b].adj.push_back(a); city[b].degree++; } cin >> M; City tmp[10001]; while (M--) { for (int i = 1; i <= N; ++i) { tmp[i].adj = city[i].adj; tmp[i].degree = city[i].degree; } int num; cin >> num; while (num--) { int cur; cin >> cur; for (auto &x : tmp[cur].adj) tmp[x].degree--; tmp[cur].degree = 0; } bool flag = true; for (int i = 1; i <= N; ++i) { if (tmp[i].degree > 0) { flag = false; break; } } if (flag) cout << "YES\n"; else cout << "NO\n"; } }
#include<iostream> #include<cstring> #define maxn 10001 usingnamespacestd; int u[maxn], v[maxn], lost[maxn]; intmain() { int N, M; cin >> N >> M; for (int i = 0; i < M; ++i) cin >> u[i] >> v[i]; int N2; cin >> N2; while (N2--) { int K; cin >> K; memset(lost, 0, sizeof(lost)); while (K--) { int a; cin >> a; lost[a] = 1; } bool flag = true; for (int i = 0; i < M; ++i) { if (!lost[u[i]] && !lost[v[i]]) { flag = false; break; } } if (flag) cout << "YES\n"; else cout << "NO\n"; } }